#pragma once
#include "BaseUserEvent.h"
#include "operationState.h"
#include <osgViewer/View>

class IEventCall;
/**
 * @brief 测量线事件
 */
class COsgMeasureLineEvent : public CBaseUserEvent
{
public:
    /**
     * @brief 构造函数
     * @param view  浏览器
     * @param root  浏览器
     * @param iCall  回调类
     */
    COsgMeasureLineEvent(osgViewer::View *view, osg::Group *root, IEventCall *icall);

protected:
    /**
     * @brief handle 事件处理函数，可处理客户端发送的gui消息
     * @param ea  gui消息，包含鼠标、键盘等消息
     * @param aa 没用过
     */
	virtual bool handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa);

    /**
     * @brief updateActivatedStatus 更新事件激活状态，是个纯虚函数，子类需要重写
     * @param vecOpState 激活消息，可含有多个事件的激活消息
     */
    virtual void updateActivatedStatus(const std::vector<OperatingState> vecOpState);

protected:
    /**
     * @brief vecWorldCoord 存储鼠标点击的点的坐标信息，是世界坐标系
     */
	std::vector<osg::Vec3d> vecWorldCoord;

    /**
     * @brief mView 浏览器
     */
    osgViewer::View *mView;
    /**
     * @brief mRoot 场景根节点
     */
    osg::Group *mRoot;

    /**
     * @brief mEditSceneGroup 保存测量时候绘制图形的组
     */
    osg::Group* mEditSceneGroup;

    /**
     * @brief iCall 回调类
     */
    IEventCall *miCall;

    /**
     * @brief isActivated 判断事件是否激活
     */
    bool isActivated;
};
